package domain;

import java.sql.SQLException;
import java.util.Vector;

import persistencia.AdministradorPersistenciaUsuario;
import view.UsuarioView;

public class Usuario implements Persistible {
	private String nombre;
	private String apellido;
	private String domicilio;
	private String dni;
	private String telefono;
	private String email;
	private int usuarioId;
	private String estado;
	private Vector<Linea> lineas;
	private Vector<Factura> facturas;
	
	public Usuario(int usuarioId, String nombre, String apellido, String domicilio,
					String dni, String telefono, String email, String estado) {
		this.usuarioId = usuarioId;
		this.nombre = nombre;
		this.apellido = apellido;
		this.domicilio = domicilio;
		this.dni = dni;
		this.telefono = telefono;
		this.email = email;
		this.estado = estado;
		this.lineas = new Vector<Linea>();
		this.facturas = new Vector<Factura>();
	}
	
	public String getNombre() {
		return nombre;
	}
	
	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}
	
	public int getId() {
		return usuarioId;
	}
	
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	public String getApellido() {
		return apellido;
	}
	
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
	
	public String getDomicilio() {
		return domicilio;
	}
	
	public void setDomicilio(String domicilio) {
		this.domicilio = domicilio;
	}
	
	public String getDni() {
		return dni;
	}
	
	public String getTelefono() {
		return telefono;
	}
	
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}
	
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setDni(String dni) {
		this.dni = dni;
	}

	public void setUsuarioId(int usuarioId) {
		this.usuarioId = usuarioId;
	}
	
	
	public int getUsuarioId() {
		return usuarioId;
	}

	public void addLineas(Linea linea) {
		lineas.add(linea);
	}
	
	public void removeLinea(Linea linea) {
		lineas.remove(linea);
	}
	
	public Vector<Linea> getLineas() {
		return lineas;
	}
	
	public void addFactura(Factura factura) {
		facturas.add(factura);
	}
	
	public void removeFactura(Factura factura) {
		facturas.remove(factura);
	}
	
	public Vector<Factura> getFacturas() {
		return facturas;
	}

	public UsuarioView getUsuarioView() {
		return new UsuarioView(getId(), dni, nombre,apellido, domicilio, telefono, email);
	}
	
	@Override
	public void persistir() {
		getAdministradorPersistenciaUsuario().insert(this);		
	}
	
	public void update() {
		getAdministradorPersistenciaUsuario().update(this);		
	}
	
	public static Usuario get(String dni) {
		return getAdministradorPersistenciaUsuario().buscarUsuario(dni);
	}
	
	public static Vector<Usuario> getUsuarios() throws SQLException {
		return getAdministradorPersistenciaUsuario().getUsuarios();
	}
	
	private static AdministradorPersistenciaUsuario getAdministradorPersistenciaUsuario() {
		return AdministradorPersistenciaUsuario.getInstancia();
	}

	public UsuarioView getView() {
		return new UsuarioView(getUsuarioId(), getDni(), getNombre(), getApellido(), getDomicilio(), getTelefono(), getEmail());
	}

}
